package integracion;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.util.ArrayList;

import negocio.ManteInfoMaterial;
import negocio.MantePetMaterial;
import negocio.MantePetRecurso;
import negocio.ManteRevEspacio;
import negocio.ManteRevisionMat;
import negocio.TransferGeneral;
import negocio.TransferMantenimiento;

public class DAOMantenimientoImp implements DAOMantenimiento {
	
Connection _conexionBBDD;	

private static DatosBBDD datosBBDD=CargadorBBDD.getParametrosBBDD();

	
	public DAOMantenimientoImp() {
		super();
		try {

			Class.forName("com.mysql.jdbc.Driver");
			_conexionBBDD = DriverManager.getConnection("jdbc:mysql://"+datosBBDD.getDireccion()+"/"+datosBBDD.getNombreBBDD(), datosBBDD.getUser(), datosBBDD.getPass());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	@Override
	public void setFichar(TransferMantenimiento datos) {
		
		//BBDD asistenciaMantenimiento
		//INSERT INTO asistenciaMantenimiento VALUES ('123', '17:15:12', false, true);
		
		String sql="INSERT INTO asistenciaMantenimiento VALUES " +
				"('1', '"+datos.getFecha()+"', "+datos.isHeAbierto()+", "+datos.isHeCerrado()+");";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeUpdate(sql);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	@Override
	public boolean getPeticionesMaterial(TransferMantenimiento datos) {
		String sql="SELECT * FROM peticionMaterial WHERE completada = 'false';";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			
			while (res.next()){
				String  id = res.getString(1);
				String  dniEmpl = res.getString(3);
				String  isMat = res.getString(2);
				String  cant = res.getString(4);
				boolean comp = res.getBoolean(5);
				
				MantePetMaterial pet = new MantePetMaterial();
				
				pet.setCant(Integer.parseInt(cant) );
				pet.setDniEmpl(Integer.parseInt(dniEmpl));
				pet.setIdMaterial(Integer.parseInt(isMat));
				pet.setIdPet(Integer.parseInt(id));
				pet.setCompletada(comp);
			
				datos.getListaPetMat().add(pet);
			}
						
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;

	}
	
	@Override
	public boolean getIdMaterialdePeticion(TransferMantenimiento datos) {
		String sql="SELECT idMaterial FROM peticionMaterial WHERE idpeticionMaterial = '"+datos.getIdPeticionMaterial()+"';";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			
			if (res.next()){
				int  idMaterial = res.getInt(1);
				
				datos.setIdMaterial(idMaterial);
			}
						
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;

	}
	
	@Override
	public boolean responderPeticionMaterial(TransferMantenimiento datos) {
		
		String sql = "UPDATE peticionMaterial SET completada = '1' WHERE idpeticionMaterial = '" + datos.getIdPeticionMaterial()+"';";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeUpdate(sql);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		String sql2 = "UPDATE material SET cantidad = '"+datos.getCant()+"' WHERE idmaterial = '" + datos.getIdMaterial()+"';";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeUpdate(sql2);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return false;
	}
	
	
	@Override
	public boolean getInfoMaterial(TransferMantenimiento datos) {
		String sql="SELECT * FROM material WHERE idMaterial = '"+datos.getIdMaterial()+"';";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			
			while (res.next()){
				int  idMat = res.getInt(1);
				String  nombre = res.getString(2);
				String  descrp = res.getString(3);
				int  cant = res.getInt(4);
				boolean recurso = res.getBoolean(5);
				
				ManteInfoMaterial pet = new ManteInfoMaterial();
				
				pet.setIdMat(idMat);
				pet.setNombre(nombre);
				pet.setDescrp(descrp);
				pet.setCant(cant);
				pet.setRecurso(recurso);
				datos.setMaterial(pet);
			}
						
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;
	}

	
	@Override
	public boolean cambiaEstadoClase(TransferMantenimiento datos) {
	
		String sql = "UPDATE revisionEspacio SET descripcion = '" + datos.getDescEspacio() + "' WHERE idEspacio = '" + datos.getIdEspacio()+"';";
		
		try {
			Statement sentencia = _conexionBBDD.createStatement();
			sentencia.executeUpdate(sql);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
	
	
	
	
	@Override
	public boolean getRevisionEspacio(TransferMantenimiento datos) {
		String sql="SELECT * FROM revisionEspacio;";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			
			while (res.next()){
				int   idEsp = res.getInt(1);
				//Time fecha2 = res.getTime(2);
				//String  fecha = res.getString("fecha");
				int  dniMante = res.getInt(3);
				String  descrip = res.getString(4);
				
				ManteRevEspacio pet = new ManteRevEspacio();
				
				pet.setIdEsp(idEsp);
				//pet.setFecha(fecha);
				pet.setDniMante(dniMante);
				pet.setDescrip(descrip);
				datos.getListaRevEsp().add(pet);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;

	}
	
	@Override
	public boolean getPeticionesElectronico(TransferMantenimiento datos) {
		String sql="SELECT * FROM peticionRecurso WHERE COMPLETADA= 'Pendiente';";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			
			while (res.next()){
				int  id = res.getInt(1);				
				int  idMat = res.getInt(2);
				int  dniEmpl = res.getInt(3);
				Date ini   = res.getDate(4);
				Date fin = res.getDate(5);
				String compl = res.getString(6);
				
				MantePetRecurso pet = new MantePetRecurso();
				
				pet.setIdPeticion(id);
				pet.setIdMaterial(idMat);
				pet.setDniEmpleado(dniEmpl);
				pet.setFechaIni(ini);
				pet.setFechaFin(fin);
				pet.setCompletada(compl);
				
				datos.getListaPetRecurso().add(pet);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;

	}
		

	@Override
	public boolean responderPetRecurso(TransferMantenimiento datos){
	
		String sql = "UPDATE peticionRecurso SET completada = '" + datos.getRespuestaPetRecurso() + "' WHERE idpeticionRecurso = '" + datos.getIdPeticionRecurso()+"';";
		
		try {
			Statement sentencia = _conexionBBDD.createStatement();
			sentencia.executeUpdate(sql);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
	
	@Override
	public boolean insertPeticionReposicionMaterial(TransferMantenimiento datos){
	
		String sql="INSERT INTO peticionReposicionMaterial VALUES " +
				"(0 ,"+datos.getDni()+", "+datos.getIdMaterial()+", "+datos.getCant()+" ,'"+datos.getFechaPeticion()+"' ,null , false);";
				
		try {
			Statement sentencia = _conexionBBDD.createStatement();
			sentencia.executeUpdate(sql);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
	
	@Override
	public boolean listarRevision(TransferMantenimiento datos){
		String sql="SELECT * FROM revisionMaterial;";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			ArrayList<ManteRevisionMat> lista = new ArrayList<ManteRevisionMat>();
			datos.setListaRevision(lista);
			while (res.next()){
				int  idMat = res.getInt(1);
				Date fecha   = res.getDate(2);
				int  dniEmpl = res.getInt(3);
				String descp = res.getString(4);
				
				ManteRevisionMat pet = new ManteRevisionMat();
				
				pet.setIdMat(idMat);
				pet.setDniEmpl(dniEmpl);
				pet.setFecha(fecha);
				pet.setDescp(descp);
				
				datos.getListaRevision().add(pet);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;

	}
	
	public boolean getListaMaterial(TransferMantenimiento datos){
		String sql="SELECT * FROM material ;";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			
			while (res.next()){
				int  idMat = res.getInt(1);
				String  nombre = res.getString(2);
				String  descrp = res.getString(3);
				int  cant = res.getInt(4);
				boolean recurso = res.getBoolean(5);
				
				ManteInfoMaterial pet = new ManteInfoMaterial();
				
				pet.setIdMat(idMat);
				pet.setNombre(nombre);
				pet.setDescrp(descrp);
				pet.setCant(cant);
				pet.setRecurso(recurso);
				datos.setMaterial(pet);
				
				datos.getListaMateriales().add(pet);
			}
						
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return false;
	}
	
	
	
	@Override
	public boolean insertRevisionMaterial(TransferMantenimiento datos){
	
		String sql="INSERT INTO revisionMaterial VALUES " +
				"("+datos.getIdMaterial()+", '"+datos.getFechaPeticion()+"', "+datos.getDni()+" ,'"+datos.getDescripcion()+"') ON DUPLICATE KEY UPDATE descripcion = VALUES(descripcion);\n";
				
		try {
			Statement sentencia = _conexionBBDD.createStatement();
			sentencia.executeUpdate(sql);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}


}
